package com.sky.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sky.domain.Clazz;
import com.sky.domain.Grade;
import com.sky.service.ClazzService;
import com.sky.service.GradeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 尹稳健~
 * @description: 控制器-管理班级信息页面
 * @version 1.0
 */
@Controller
@RequestMapping("/clazz")
public class ClazzController {

    //注入业务对象
    @Autowired
    @Qualifier("clazzServiceImpl")
    private ClazzService clazzService;

    //注入业务对象
    @Autowired
    @Qualifier("gradeServiceImpl")
    private GradeService gradeService;

    //存储预返回页面的数据对象
    private Map<String,Object> result = new HashMap<String, Object>();

    /**
     * @description: 跳转到班级信息管理页面
     * @param: Model
     * @return: java.lang.String
     */
    @RequestMapping("/goClazzPage")
    public String goClazzPage(Model model){
        //向页面发送一个存储着Grade的List对象
        List<Grade> gradeList = gradeService.selectAll();
        model.addAttribute("gradeList",gradeList);
        return "/clazz/clazzList";
    }

    /**
     * @description: 分页查询班级信息列表:根据班级与年级名查询指定/全部班级信息列表
     * @param: page 当前页码
     * @param: rows 列表行数
     * @param: gradename 年级名称
     * @param: clazzname 班级名称
     * @return: java.util.Map<java.lang.String, java.lang.Object>
     */
    @RequestMapping("/getClazzList")
    @ResponseBody
    public Map<String,Object> getClazzList(Integer page, Integer rows,
                                           String clazzName,String gradeName){
        //存储查询的clazzname,gradename信息
        Clazz clazz = new Clazz(clazzName, gradeName);
        //设置每页的记录数
        PageHelper.startPage(page,rows);
        //根据班级与年级名获取指定或全部班级信息列表
        List<Clazz> clazzList = clazzService.getClazzList(clazz);
        //封装列表信息
        PageInfo<Clazz> pageInfo = new PageInfo<Clazz>(clazzList);
        //获取当前页数据列表
        List<Clazz> list = pageInfo.getList();
        //获取总记录数
        long total = pageInfo.getTotal();
        //存储数据对象
        result.put("total",total);
        result.put("rows",list);
        return result;
    }

    /**
     * @description: 添加班级信息
     * @param: clazz
     * @return: java.util.Map<java.lang.String, java.lang.Object>
     */
    @RequestMapping("/addClazz")
    @ResponseBody
    public Map<String,Object> addClazz(Clazz clazz){
        Clazz clazzByNumber = clazzService.findClazzByName(clazz);
        //判断班级名是否已存在
        if (clazzByNumber!=null){
            result.put("success",false);
            result.put("msg","该班级已经存在! 请修改后重试!");
            return result;
        }
        // 添加操作
        clazzService.addClazz(clazz);
        result.put("success",true);
        return result;
    }

    /**
     * @description: 根据id修改指定的班级信息
     * @param: clazz
     * @return: java.util.Map<java.lang.String, java.lang.Object>
     */
    @RequestMapping("/editClazz")
    @ResponseBody
    public Map<String,Object> editClazz(Clazz clazz){
        Clazz clazzByName = clazzService.findClazzByName(clazz);
        System.out.println(clazzByName);
        //需排除用户只修改班级名以外的信息
        if (clazzByName!=null){
            if (!clazzByName.getId().equals(clazz.getId())){
                result.put("success",false);
                result.put("msg","该班级名称已存在! 请修改后重试!");
                return result;
            }
        }
        // 修改操作
        clazzService.editClazz(clazz);
        result.put("success",true);
        return result;
    }

    /**
     * @description: 删除指定id的班级信息
     * @param: ids 拼接后的id
     * @return: java.util.Map<java.lang.String, java.lang.Object>
     */
    @RequestMapping("/deleteClazz")
    @ResponseBody
    public Map<String,Object> deleteClazz(@RequestParam( value = "ids[]",required = true) Integer[] ids){
        System.out.println(ids);
        clazzService.deleteClazz(ids);
        result.put("success",true);
        return result;
    }
}
